package com.ftg.learn.framework.springframework.core.official;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author lijiaxin
 * @version 1.0
 * @date 2023/9/12 13:05
 */

public class DemoSpring {

    public static void main(String[] args) {
        //实例化一个容器
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

        //是不是采用的id的方式获取
        //ByName
//        Supplier supplier = (Supplier) context.getBean("supplier");
//        System.out.println(supplier.getName());
//
//        Product product1 = (Product) context.getBean("product1");
//        System.out.println(product1.getName());
//        System.out.println(product1.getSupplier().getName());
//
//        Product product2 = (Product) context.getBean("product2");
//        System.out.println(product2.getName());
//        System.out.println(product2.getSupplier().getName());


        //        是否存在其它的消费方式
        //在使用的时候 如果不需要强制类型转换
//        Supplier supplier1 = context.getBean(Supplier.class);
//        System.out.println(supplier1.getName());

        //ByType
//        Product prod1 = context.getBean(Product.class);
//        在同一个容器当中 id不能重复 name不能重复
        Product prod3 = (Product) context.getBean("product1");
        Product prod31 = (Product) context.getBean("product1");

//        System.out.println(prod3.getName());

        System.out.println(prod3.getSay());

//        System.out.println(context.getId());

        //装配 : 从spring容器里面取到指害的需求实例，把实例给变量 。
        // 通过 name byName
        // 通过 type byType  就有问题，多个实例的问题  primary=true  同时指定id 或者 name
        //init-method 表示spring容器实例化类成功以后会自动调用的方法

        //类的生命周期 ： 创建初始化(--》 构造)  执行（。。。init-method）   销毁(destory-method前)

//        depends-on="parentProduct"  依赖，表示当前实例化的bean，实例依赖其它 类..要在指定的parentProduct后面实例化

//        default-lazy-init="true"  懒加载

//        scope 作用域  单例  原型

    }
}
